/**
 * 动画缓冲 version 1.0
 * 利用sin函数进行运动的缓冲，主要原理是当y = sin(x) 函数值逐渐到达坡峰时，斜率越来 越小，
 * 即相对前边的运动而言 ，x变化相同的距离 y的变化值越来越小，也可理解为y轴运动的速度越来越慢
 */
;
(function() {
	window.animate_buffer = function(ele, option, times,doneCallback,stopInterval) { 
		                   //绑定的对象，参数，缓冲时间,完成后的回调函数,完成后是否停止运动，
		/*var option = {  //参数
			left:0;       //目标坐标
			top:0, 
			opacity:80;,  //透明度最终值,使用0-100兼容IE
			width:0,      //最终宽高
			height:0，
			background    //颜色
		}*/
		var _ele = new Object(); //存储对象属性初始值
		for(var attr in option) {
			_ele[attr] = (attr == 'opacity') ? getStyle(ele, attr) * 100 : getStyle(ele, attr);
		}
		var x = 0;
		var step = 3;
		clearInterval(ele._interVal); //保证一个元素只有一个定时器
		ele._interVal = setInterval(function() {
			for(var attr in _ele) {
				var value = option[attr] - _ele[attr];//振幅
				var tmp = _ele[attr] + (Math.sin(x * Math.PI / 180) * value); // x * Math.PI / 180数字转弧度
				ele.style[attr] = (attr == 'opacity') ? tmp/100:(tmp+"px");
				 
			}
			x+=step;
			if(!stopInterval && x >= 90) {
				clearInterval(ele._interVal);//到达预期值，停止定时器
				doneCallback && doneCallback.call(ele,ele);
			}
				
		}, times / 30);
		// 间隔times/30是因为当sin(π/2)=1即为所要到达的目标，
		// 因π/2=90°，即步长为step = 3,90/3=30,分30次跑完，times/30即为每次的时间
		function getStyle(ele, attr) {
			return parseInt(ele.currentStyle ? obj.currentStyle[attr] : getComputedStyle(ele)[attr]); //兼容，去除单位
		}
	}

})();